Segundo a Wikipédia:
Em Ciência da Computação, no contexto de armazenamento e transmissão de dados, a serialização é o processo de salvar um objeto em um meio de armazenamento (como um arquivo de computador ou um buffer de memória) ou transmiti-lo por uma conexão de rede, seja em forma binária ou em formato de texto como o XML. Esta série de bytes pode ser usada para recriar um objeto com o mesmo estado interno que o original.
Fonte: http://pt.wikipedia.org/wiki/Serializa%C3%A7%C3%A3o
Essa técnica é muito útil quando se deseja salvar dados como arrays ou objetos em arquivos, cookies, sessões ou transmiti-los via sockets, por exemplo.
Vou dar um exemplo básico de serialização usando PHP e outro usando Python.
PHP
O PHP possui as funções serialize e unserialize, que funcionam de forma muito simples. Um exemplo prático é suficiente para compreender.
$arr = array( 'dado 1', 'dado 2' ); var_dump( $arr ); $serArr = serialize( $arr ); var_dump( $serArr ); $unSerArr = unserialize( $serArr ); var_dump( $unSerArr ); |
Saída:
array(2) { [0]=> string(6) "dado 1" [1]=> string(6) "dado 2" } string(40) "a:2:{i:0;s:6:"dado 1";i:1;s:6:"dado 2";}" array(2) { [0]=> string(6) "dado 1" [1]=> string(6) "dado 2" }
Veja que inicialmente o dado é um array. Após a serialização, vira uma string, que pode ser salva em arquivo, cookie, sessão ou transmitida byte a byte via socket. Após ser desserializada, volta a ser um array, da mesma forma como era antes.
Isso vale para qualquer tipo de dado: arrays, objetos, arrays de objetos, objetos com outros objetis intanciados…
Python
O Python possui o módulo pickle, que permite salvar a serialização direto num arquivo ou atribuí-la a uma variável. O mesmo vale para a desserialização: pode desserializar um dado direto de um arquivo ou a partir de dados de uma variável.
Vou mostrar um exemplo semelhante ao anterior, usando apenas variáveis:
#!/usr/bin/env python import pickle; arr = [ 'dado 1', 'dado 2' ]; print arr; serArr = pickle.dumps( arr ); print serArr; unSerArr = pickle.loads( serArr ); print unSerArr; |
Saída:
['dado 1', 'dado 2'] (lp0 S'dado 1' p1 aS'dado 2' p2 a. ['dado 1', 'dado 2']
Novamente, iniciamos com um array (lista para os mais íntimos ao Python :P ), passando a uma string representando a lista serializada. Ao fim, temos a lista original.
Para usar arquivos, basta usar dump e load, em vez de dumps e loads. Mais exemplos podem ser vistos na documentação do módulo pickle.
Roberto Beraldo
Latest posts by Roberto Beraldo (see all)
- Não Tenha Preguiça de Ler! - 25/04/2016
- Como Atualizar Scripts PHP de MySQL Para MySQLi - 29/10/2015
- Como usar PDO com banco de dados MySQL - 10/09/2015